/**
 * 一道头条笔试题
 * 写出以下程序的打印结果
 * 我的分析结果
 * script start
 * async1 start
 * promise1
 * script end
 * async2
 * async1 end
 * promise2
 * setTimeOut
nodejs 环境中的执行结果
script start
async1 start
async2
promise1
script end
promise2
async1 end
setTimeOut

谷歌控制台中打印的顺序是
script start
018_async_03.html:33 async1 start
018_async_03.html:39 async2
018_async_03.html:49 promise1
018_async_03.html:55 script end
018_async_03.html:35 async1 end
018_async_03.html:52 promise2
018_async_03.html:44 setTimeOut
 */
async function async1 () { // 返回一个promise
  console.log('async1 start');
  await async2();
  console.log('async1 end'); // 这里相当于宏任务中的代码
}

async function async2 () { // 返回一个promise
  console.log('async2'); // 这里相当promise中构造函数中的代码
}
console.log('script start');

setTimeout(() => {
  console.log('setTimeOut'); // 这里被放到下一个宏观任务代码中执行
}, 0)

async1();
new Promise(function (resolve) {
  console.log('promise1') // 构造函数同步的
  resolve();
}).then(() => { // then方法是异步的
  console.log('promise2');
})

console.log('script end');